package cn.tedu.store.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class TimeAspect {
	/**
	 * 统一所有的业务层中业务方法的执行时间
	 */
	/*
	 @Around注解参数中的匹配：
	  第一个 * 表示匹配所有的返回值类型
	  第二个 * 表示impl包下所有的类
	  第三个 * 表示类中的所有方法
	 最后的( . . )表示匹配所有类型的参数列表
	 */
	@Around("execution(* cn.tedu.store.service.impl.*.*(..))")
	public Object aaa(ProceedingJoinPoint pjp) throws Throwable {
		//业务执行之前 这个时间点 执行的内容：如果没有需要执行的，可以不写
		long start = System.currentTimeMillis();
		
		//执行业务方法，这里的异常要抛出去
		Object result = pjp.proceed();
		
		//业务执行之后  这个时间点  执行的内容：如果没有需要执行的，可以不写
		long end = System.currentTimeMillis();
		
		//计算耗时
		System.err.println("耗时："+(end-start)+"ms");
		
		//返回
		return result;
		
	}
}
